Apache Commons Collections লাইব্রেরি অনেক শক্তিশালী ইউটিলিটি এবং ডেটা স্ট্রাকচার সরবরাহ করে, যার মধ্যে Transformer এবং Closure দুটি গুরুত্বপূর্ণ কনসেপ্ট। এই দুটি ফিচার আপনাকে কোলেকশনগুলিতে কার্যকরীভাবে মান পরিবর্তন এবং প্রক্রিয়া চালানোর সুযোগ দেয়। চলুন, আমরা বিস্তারিতভাবে Transformer এবং Closure সম্পর্কে জানি এবং এগুলি কিভাবে ব্যবহার করা যায় তা দেখি।
Transformer একটি ফাংশনালিটি যা একটি কোলেকশনের উপাদানকে পরিবর্তন বা রূপান্তরিত করতে ব্যবহৃত হয়। আপনি একটি কোলেকশনের প্রতিটি উপাদানের উপর একটি নির্দিষ্ট কাজ করতে চান, যেমন কোনো মান পরিবর্তন বা একটি ফাংশন প্রয়োগ, তখন Transformer খুবই উপকারী।
Transformer সাধারণত org.apache.commons.collections4.Transformer
ইন্টারফেস দ্বারা বাস্তবায়িত হয় এবং এটি একটি transform()
মেথড প্রদান করে যা একটি ইনপুট অবজেক্ট নিয়ে তার উপর কাজ করে এবং আউটপুট প্রদান করে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.transformer.ConstantTransformer;
public class TransformerExample {
public static void main(String[] args) {
// Define a transformer that always returns the same object
Transformer<String, String> transformer = new ConstantTransformer("Hello, World!");
// Apply the transformer to a string
String result = transformer.transform("Some input");
System.out.println("Transformed result: " + result); // Output will always be "Hello, World!"
}
}
এখানে:
ConstantTransformer
একটি Transformer ক্লাস যা একটি নির্দিষ্ট মান (এখানে "Hello, World!") রিটার্ন করে, এই মানের সাথে কিছু সম্পর্কিত না থাকা সত্ত্বেও।transform()
মেথড একটি ইনপুট গ্রহণ করে এবং সেটির উপর কার্যকরী কাজ করে আউটপুট প্রদান করে।StringValueTransformer
: এটি একটি ট্রান্সফরমার যা কোনো ইনপুটের স্ট্রিং রিপ্রেজেন্টেশন ফেরত দেয়।ChainedTransformer
: একাধিক ট্রান্সফরমারের একটি শৃঙ্খল তৈরি করতে সাহায্য করে, যা একের পর এক কার্যকরী হয়।Closure একটি ফাংশনালিটি যা একটি কোলেকশন বা ইটারেবল এর উপাদানগুলির উপর নির্দিষ্ট কাজ সম্পাদন করে, কিন্তু এটি কোনো মান ফেরত দেয় না। এটি একটি একক অ্যাকশন বা কার্যকলাপ সম্পাদন করতে ব্যবহৃত হয়। যেমন: কোন উপাদানকে পরিবর্তন করা, সেটি প্রিন্ট করা, বা অন্য কোন কার্যক্রম সম্পাদন করা। এটি সাধারণত org.apache.commons.collections4.Closure
ইন্টারফেস দ্বারা বাস্তবায়িত হয়।
Closure কোলেকশনের প্রতিটি উপাদানের উপর একটি কাজ প্রয়োগ করে, কিন্তু এটি কোনো রিটার্ন ভ্যালু প্রদান করে না। আপনি যখন কোলেকশনের উপাদানগুলির উপর সাইড-এফেক্ট (যেমন পরিবর্তন করা বা প্রিন্ট করা) করতে চান, তখন Closure উপকারী।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.ArrayList;
public class ClosureExample {
public static void main(String[] args) {
// A collection of strings
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Define a closure that prints each item
Closure<String> printClosure = item -> System.out.println(item);
// Apply the closure to each element of the list
CollectionUtils.forEach(list, printClosure);
}
}
এখানে:
Closure
ইন্টারফেসের মাধ্যমে একটি printClosure তৈরি করা হয়েছে, যা একটি স্ট্রিং কোলেকশনের প্রতিটি উপাদান প্রিন্ট করে।CollectionUtils.forEach()
মেথডটি কোলেকশনের প্রতিটি উপাদানকে প্রক্রিয়া করার জন্য ব্যবহার করা হয়।ExecutorClosure
: একটি নির্দিষ্ট Runnable বা Callable কাজ করে একটি কোলেকশনের উপাদানগুলির উপর।ChainedClosure
: একাধিক ক্লোজারকে শৃঙ্খলে যুক্ত করে, যাতে একের পর এক ক্লোজার কার্যকরী হয়।Transformer এবং Closure এর মধ্যে কিছু মূল পার্থক্য রয়েছে:
Transformer এবং Closure উভয়ই কোলেকশনগুলির উপর কাজ করতে ব্যবহৃত হয়, তবে ব্যবহারের উদ্দেশ্য কিছুটা ভিন্ন:
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.transformer.TransformIterator;
import java.util.List;
import java.util.ArrayList;
public class TransformerClosureExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Create a transformer that converts strings to uppercase
Transformer<String, String> toUpperCaseTransformer = String::toUpperCase;
// Apply the transformer to each item in the list
List<String> transformedList = new ArrayList<>();
for (String item : list) {
transformedList.add(toUpperCaseTransformer.transform(item));
}
// Create a closure that prints each item
Closure<String> printClosure = item -> System.out.println(item);
// Apply the closure to the transformed list
CollectionUtils.forEach(transformedList, printClosure);
}
}
এখানে:
Transformer এবং Closure Apache Commons Collections লাইব্রেরির দুটি গুরুত্বপূর্ণ কনসেপ্ট। Transformer কোলেকশনের উপাদানগুলির উপর কার্যকরী কাজ করে এবং একটি নতুন মান প্রদান করে, যেখানে Closure কোনো নির্দিষ্ট কাজ (যেমন প্রিন্ট করা বা পরিবর্তন করা) সম্পাদন করে এবং কোন মান ফেরত দেয় না। এই দুটি কনসেপ্ট কোলেকশনগুলির উপর আরও শক্তিশালী এবং নমনীয় কার্যকরী অপারেশন পরিচালনা করতে সহায়ক, এবং আপনাকে বিভিন্ন ডেটা ম্যানিপুলেশন কাজ দ্রুত এবং সহজে সম্পাদন করতে সাহায্য করে।
Apache Commons Collections লাইব্রেরি Transformer ইন্টারফেস সরবরাহ করে যা একটি functional transformation প্রদান করে। এটি একটি জেনেরিক ইন্টারফেস যা একটি ইনপুট ভ্যালু নিয়ে তার উপর একটি নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করে এবং একটি আউটপুট ভ্যালু ফেরত দেয়। এই ইন্টারফেসটি সাধারণত map, filter, অথবা transform অপারেশনগুলোতে ব্যবহৃত হয়।
Transformer ইন্টারফেস মূলত input ভ্যালুর উপর transformation প্রক্রিয়া প্রয়োগ করে একটি নতুন output তৈরি করে। এটি functional programming ধারণার মতো কাজ করে যেখানে একটি অবজেক্ট বা ভ্যালুর উপর নির্দিষ্ট ফাংশন প্রয়োগ করা হয়।
Transformer একটি সাধারণ functional interface যা ইনপুট ভ্যালু নিয়ে একটি আউটপুট ভ্যালু তৈরি করার জন্য একটি transform() মেথড ডিফাইন করে। এটি ইনপুটের ধরণ ও আউটপুটের ধরণ একই হতে পারে বা ভিন্নও হতে পারে।
public interface Transformer<I, O> {
O transform(I input);
}
এখানে:
Transformer ইন্টারফেসটি সাধারণত map, filter বা transform অপারেশনগুলোতে ব্যবহার করা হয়, যেখানে ডেটা স্ট্রাকচারের উপাদানগুলো পরিবর্তন বা রূপান্তর করা হয়। এটি মূলত Java Collections বা Streams API এর মতো কনটেইনার থেকে ডেটা ট্রান্সফর্মেশন করার জন্য ব্যবহার করা যায়।
ধরা যাক, আমরা একটি String তালিকা থেকে প্রতিটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করতে চাই। এর জন্য আমরা Transformer ইন্টারফেস ব্যবহার করতে পারি।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class TransformerExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
// Create a transformer that converts string to uppercase
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
return input.toUpperCase();
}
};
// Use CollectionUtils to transform the list using the transformer
List<String> transformedWords = (List<String>) CollectionUtils.collect(words, transformer);
// Print the transformed list
System.out.println(transformedWords); // Output: [APPLE, BANANA, CHERRY]
}
}
এখানে:
আউটপুট:
[APPLE, BANANA, CHERRY]
আপনি Transformer ইন্টারফেস ব্যবহার করে জটিল অবজেক্টগুলির উপরও রূপান্তর প্রয়োগ করতে পারেন। যেমন, আপনি একটি Person অবজেক্টের age ফিল্ড পরিবর্তন করতে চাইছেন।
import org.apache.commons.collections4.Transformer;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class TransformerObjectExample {
public static void main(String[] args) {
Person person = new Person("John", 25);
// Create a transformer that increases the age by 5 years
Transformer<Person, Person> transformer = new Transformer<Person, Person>() {
@Override
public Person transform(Person input) {
return new Person(input.getName(), input.getAge() + 5);
}
};
// Apply the transformer to the person object
Person transformedPerson = transformer.transform(person);
// Print the transformed person
System.out.println(transformedPerson); // Output: Person{name='John', age=30}
}
}
এখানে:
আউটপুট:
Person{name='John', age=30}
CollectionUtils.collect(): এটি একটি নির্দিষ্ট Transformer ব্যবহার করে একটি Collection এর উপাদানগুলোকে রূপান্তর করতে সাহায্য করে। এটি খুবই উপকারী যখন আপনাকে একটি লিস্ট বা সেটের উপর একই ধরনের রূপান্তর প্রক্রিয়া প্রয়োগ করতে হয়।
উদাহরণ:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
Transformer<Integer, Integer> squareTransformer = number -> number * number;
List<Integer> squaredNumbers = (List<Integer>) CollectionUtils.collect(numbers, squareTransformer);
System.out.println(squaredNumbers); // Output: [1, 4, 9, 16]
Transformer ইন্টারফেস Apache Commons Collections লাইব্রেরির একটি গুরুত্বপূর্ণ অংশ, যা functional transformation এর মাধ্যমে ডেটার রূপান্তর করার সুবিধা দেয়। এটি সাধারণত map অথবা transform অপারেশনগুলোতে ব্যবহৃত হয়, যেখানে ডেটা সংগ্রহের উপাদানগুলোকে পরিবর্তন করা হয়। Transformer এর মাধ্যমে আপনি যে কোনো অবজেক্ট বা ডেটা স্ট্রাকচারে নির্দিষ্ট রূপান্তর প্রক্রিয়া প্রয়োগ করতে পারেন, যেমন স্ট্রিংকে ক্যাপিটালাইজ করা, বয়স পরিবর্তন করা, অথবা সংখ্যা স্কয়ার করা। এটি সহজ, কার্যকরী এবং পুনরায় ব্যবহারযোগ্য কোড লেখার সুযোগ দেয়।
Apache Commons Collections লাইব্রেরি Closure ইন্টারফেস প্রদান করে, যা একটি ফাংশনাল ইন্টারফেস হিসেবে কাজ করে, এবং এটি Java কোডে ডাটা স্ট্রাকচারগুলিতে অপারেশন প্রয়োগ করার জন্য ব্যবহৃত হয়। Closure ইন্টারফেস মূলত একটি ফাংশনাল স্টাইল ডেভেলপমেন্ট প্যাটার্ন অনুসরণ করে এবং এটি একটি একক execute()
পদ্ধতির মাধ্যমে কার্যক্রম সম্পাদন করে।
এই লেখায়, আমরা Closure ইন্টারফেস কিভাবে ব্যবহার করে বিভিন্ন Collection বা Iterator তে ফাংশন প্রয়োগ করা যায়, তা দেখব।
Closure ইন্টারফেসের উদ্দেশ্য হল একটি কার্যপ্রণালী (functionality) এক্সিকিউট (execute) করা যেটি কোনো ইনপুট (যেমন, একটি Object) নেয় এবং এর উপর কোনো অপারেশন (যেমন print, transform, update) প্রয়োগ করে। এটি বিশেষভাবে ব্যবহার হয় যখন আপনি একটি Iterator বা Collection এর প্রতিটি উপাদানের উপর নির্দিষ্ট একটি ফাংশন প্রয়োগ করতে চান।
Closure ইন্টারফেসে একমাত্র পদ্ধতি execute(T input)
থাকে, যেখানে T
হল ইনপুট প্যারামিটার (যে কোন অবজেক্ট)।
Apache Commons Collections এ Closure ইন্টারফেসের ব্যবহার মূলত ফাংশনালিটি প্রয়োগ করার জন্য হয়। নিচে এর ব্যবহার দেখানো হয়েছে।
import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;
import java.util.ArrayList;
import java.util.List;
public class ClosureExample {
public static void main(String[] args) {
// List of strings
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// Closure implementation using LambdaClosure
Closure<String> printClosure = new LambdaClosure<>(fruit -> System.out.println(fruit));
// Applying Closure on each item in the list
for (String fruit : fruits) {
printClosure.execute(fruit); // Execute closure for each fruit
}
}
}
এখানে:
Apple
Banana
Cherry
এখানে, প্রতিটি ফলের নাম প্রিন্ট করার জন্য Closure ব্যবহার করা হয়েছে।
আপনি Collection বা Iterator এর উপর ফাংশন প্রয়োগ করতে পারেন, যেমন প্রতিটি উপাদানে কোন পরিবর্তন বা অপারেশন চালানো।
import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;
import java.util.ArrayList;
import java.util.List;
public class ClosureListExample {
public static void main(String[] args) {
// List of numbers
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
// Closure implementation to double each number
Closure<Integer> doubleClosure = new LambdaClosure<>(number -> System.out.println(number * 2));
// Applying Closure on each item in the list
for (Integer number : numbers) {
doubleClosure.execute(number); // Execute closure to double the number
}
}
}
এখানে:
2
4
6
এখানে, প্রতিটি সংখ্যার উপর গুণ ২ করে প্রিন্ট করা হয়েছে।
IteratorUtils এর সাথে Closure ব্যবহার করলে আপনি Iterator এর উপাদানগুলির উপর কার্যক্রম প্রয়োগ করতে পারেন।
import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.IteratorUtils;
import org.apache.commons.collections4.functors.LambdaClosure;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class IteratorClosureExample {
public static void main(String[] args) {
// List of numbers
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Closure implementation to print each number
Closure<Integer> printClosure = new LambdaClosure<>(number -> System.out.println(number));
// Iterator from the list
Iterator<Integer> iterator = numbers.iterator();
// Apply closure using IteratorUtils
IteratorUtils.forEach(iterator, printClosure);
}
}
এখানে:
1
2
3
4
5
এখানে প্রতিটি উপাদান printClosure এর মাধ্যমে প্রিন্ট করা হয়েছে।
Closure ব্যবহার করে আপনি Collection বা Iterator এর প্রতিটি উপাদানের উপর সহজেই ফাংশন প্রয়োগ করতে পারেন, যা খুবই সুবিধাজনক যখন আপনি একটি সুনির্দিষ্ট কাজের জন্য একাধিক উপাদানে একই অপারেশন প্রয়োগ করতে চান।
import org.apache.commons.collections4.functors.Closure;
import org.apache.commons.collections4.functors.LambdaClosure;
import java.util.Arrays;
import java.util.Collection;
public class CollectionClosureExample {
public static void main(String[] args) {
// A collection of numbers
Collection<Integer> numbers = Arrays.asList(10, 20, 30, 40);
// Closure to increase each number by 5
Closure<Integer> increaseByFiveClosure = new LambdaClosure<>(number -> System.out.println(number + 5));
// Apply the closure to each element in the collection
numbers.forEach(number -> increaseByFiveClosure.execute(number));
}
}
এখানে:
15
25
35
45
Closure ইন্টারফেস ব্যবহার করে আপনি Collection বা Iterator এর প্রতিটি উপাদানের উপর নির্দিষ্ট ফাংশন প্রয়োগ করতে পারেন। Apache Commons Collections এর LambdaClosure সহ Closure ইন্টারফেস ব্যবহার করে আপনি সহজে ফিল্টারিং, ট্রান্সফর্মেশন, বা অন্যান্য কার্যক্রম সম্পাদন করতে পারেন। IteratorUtils এর মাধ্যমে আপনি Iterator এর উপাদানগুলির উপর কার্যকরভাবে Closure প্রয়োগ করতে পারেন, যা ডেভেলপারদের কোড লেখার প্রক্রিয়া অনেক সহজ এবং আরও কার্যকরী করে তোলে।
Apache Commons Collections লাইব্রেরি CollectionUtils
ক্লাসটি বিভিন্ন ধরনের collection এর জন্য সহায়ক ইউটিলিটি মেথড প্রদান করে, যা ডেটা ম্যানিপুলেশন এবং প্রক্রিয়াকরণকে সহজ করে তোলে। এর মধ্যে দুটি গুরুত্বপূর্ণ মেথড হলো transform
এবং forAllDo
। এই মেথড দুটি কালেকশনের উপাদানগুলির উপর নির্দিষ্ট কাজ করতে ব্যবহার করা হয়, যেমন transformation এবং action অপারেশন।
CollectionUtils.transform
মেথডটি একটি collection এর উপাদানগুলির উপর একটি transformation প্রয়োগ করার জন্য ব্যবহৃত হয়। এটি একটি Function এর মাধ্যমে, প্রতিটি উপাদানকে রূপান্তর (transform) করে এবং ফলস্বরূপ একটি নতুন collection তৈরি করে।
Function হল একটি ইন্টারফেস যা একটি ইনপুট মানকে একটি আউটপুট মানে রূপান্তরিত করে। এটি একটি ফাংশনাল প্রোগ্রামিং কৌশল যা stream processing এর মতো কাজ করে।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import java.util.Arrays;
import java.util.List;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Define the transformer (convert each string to uppercase)
Transformer<String, String> transformer = new Transformer<String, String>() {
public String transform(String input) {
return input.toUpperCase();
}
};
// Apply transformation
List<String> transformedList = (List<String>) CollectionUtils.collect(list, transformer);
// Print the transformed list
System.out.println("Transformed List: " + transformedList);
}
}
Transformed List: [APPLE, BANANA, CHERRY]
CollectionUtils.collect()
মেথডটি একটি Transformer
ব্যবহার করে list এর সমস্ত উপাদানকে রূপান্তরিত করেছে (এই ক্ষেত্রে, প্রতিটি স্ট্রিংকে uppercase এ রূপান্তরিত করা হয়েছে)।Transformer
ইন্টারফেসটি একটি function এর মতো কাজ করে, যা ইনপুট (একটি স্ট্রিং) গ্রহণ করে এবং একটি আউটপুট (uppercase স্ট্রিং) প্রদান করে।CollectionUtils.forAllDo
মেথডটি একটি action প্রয়োগ করে প্রতিটি উপাদানকে এক্সিকিউট করতে ব্যবহৃত হয়। এটি Closure
ইন্টারফেস ব্যবহার করে, যার মাধ্যমে আমরা কালেকশনের সমস্ত উপাদান উপর একটি নির্দিষ্ট কার্যক্রম (action) চালাতে পারি।
Closure
হল একটি ফাংশনাল প্রোগ্রামিং কৌশল, যা একটি কার্যক্রমকে একটি প্রক্রিয়ায় (action) রূপান্তরিত করে এবং প্রতিটি উপাদানের উপর সেই কার্যক্রম প্রয়োগ করে।
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Closure;
import java.util.Arrays;
import java.util.List;
public class CollectionUtilsExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// Define the closure (print each element in the list)
Closure<String> printClosure = new Closure<String>() {
public void execute(String input) {
System.out.println(input);
}
};
// Apply the closure to all elements
CollectionUtils.forAllDo(list, printClosure);
}
}
apple
banana
cherry
CollectionUtils.forAllDo()
মেথডটি Closure
ব্যবহার করে প্রতিটি উপাদানের উপর নির্দিষ্ট action (এই ক্ষেত্রে, প্রতিটি উপাদানকে প্রিন্ট করা) চালায়।Closure
ইন্টারফেসটি একটি action হিসাবে কাজ করে, যা একটি প্রক্রিয়া বা কার্যকলাপ (এই ক্ষেত্রে, স্ট্রিং আউটপুট) নির্দিষ্ট করে এবং সেটি সব উপাদানের উপর কার্যকর হয়।transform
vs forAllDo
Feature | transform | forAllDo |
---|---|---|
Purpose | Used to transform each element in a collection. | Used to apply an action to each element. |
Output | Returns a new collection with transformed elements. | Performs an action on each element, no return value. |
Usage | Used when you need to change the elements of a collection (e.g., map). | Used when you need to perform a side effect (e.g., print, modify external state). |
Interface | Uses Transformer (a function). | Uses Closure (a procedure). |
Example | Transforming a list of strings to uppercase. | Printing each element of a collection. |
transform
vs forAllDo
transform
when you want to change or transform the data in a collection. It creates a new collection with transformed elements. For example, when you need to apply a function (e.g., converting strings to uppercase or applying a mathematical function).forAllDo
when you need to apply an action (side effect) on each element in a collection. It does not return anything and is typically used when you want to perform operations like printing, updating external variables, or interacting with other systems.CollectionUtils.transform
এবং CollectionUtils.forAllDo
হল দুটি অত্যন্ত শক্তিশালী এবং কার্যকরী মেথড যা Apache Commons Collections লাইব্রেরি থেকে পাওয়া যায়। transform
মেথডটি কালেকশন উপাদানগুলির উপর ট্রান্সফরমেশন প্রয়োগ করে এবং একটি নতুন কালেকশন তৈরি করে, যেখানে forAllDo
মেথডটি প্রতিটি উপাদানের উপর একটি action প্রয়োগ করে, যেমন প্রিন্ট করা বা কোন বৈশিষ্ট্য পরিবর্তন করা।অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি শক্তিশালী লাইব্রেরি যা ডেটা স্ট্রাকচার ম্যানিপুলেশনকে সহজ এবং কার্যকরী করে তোলে। এতে Transformer এবং Closure এর মতো কাস্টম ফাংশনালিটি ব্যবহারের সুবিধা রয়েছে, যা ডেটা স্ট্রাকচারে অপারেশন করার জন্য অত্যন্ত উপকারী। Transformer ব্যবহার করে আপনি ডেটা স্ট্রাকচারের উপাদানগুলিকে রূপান্তর করতে পারেন, এবং Closure ব্যবহার করে আপনি একটি ফাংশন বা অপারেশন নির্দিষ্ট ডেটা উপাদানগুলির উপর কার্যকরী করতে পারেন।
এখানে আমরা Custom Transformer এবং Closure তৈরি করার পদ্ধতি বিস্তারিতভাবে আলোচনা করব।
Transformer একটি Function এর মতো কাজ করে, যা ইনপুট ডেটা থেকে আউটপুট ডেটা তৈরি করে। এটি সাধারণত একটি অবজেক্টের উপর একটি নির্দিষ্ট পরিবর্তন বা রূপান্তর প্রক্রিয়া কার্যকর করার জন্য ব্যবহৃত হয়।
ধরা যাক, আমাদের একটি List আছে, এবং আমরা চাই সমস্ত স্ট্রিংয়ের প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করতে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.ListUtils;
import java.util.Arrays;
import java.util.List;
public class CustomTransformerExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom transformer to convert first letter to uppercase
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
if (input == null || input.isEmpty()) {
return input;
}
// Capitalizing the first letter of the string
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
};
// Apply the transformer to the list
List<String> transformedList = ListUtils.transformedList(list, transformer);
// Print the transformed list
System.out.println(transformedList); // Output: [Apple, Banana, Orange]
}
}
এখানে:
Closure হল একটি Runnable এর মতো কাজ করে যা নির্দিষ্ট কাজ বা অপারেশন একটি ডেটা স্ট্রাকচারের উপাদানগুলির উপর সম্পাদন করে। Closure সাধারণত একটি এক্সপ্লিসিট রিটার্ন ভ্যালু ছাড়াই একটি অপারেশন সম্পন্ন করতে ব্যবহৃত হয়।
ধরা যাক, আমাদের একটি List আছে, এবং আমরা প্রতিটি উপাদানের উপর একটি কাস্টম অপারেশন (যেমন স্ট্রিংয়ের শেষে একটি বিশেষ চিহ্ন যোগ করা) সম্পাদন করতে চাই।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CustomClosureExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom closure to append a special character to each element
Closure<String> closure = new Closure<String>() {
@Override
public void execute(String input) {
// Append a special character to each string
System.out.println(input + "!");
}
};
// Apply the closure to the list
CollectionUtils.forEach(list, closure); // Output: apple! banana! orange!
}
}
এখানে:
!
চিহ্ন যোগ করবে।ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা এই তালিকার সব স্ট্রিংয়ের মধ্যে "apple" শব্দটি ফিল্টার করতে চাই, এবং তারপর বাকিগুলির প্রথম অক্ষর বড় করতে চাই।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class DataFilterAndTransform {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange", "apple pie");
// Create a transformer to capitalize the first letter of each string
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
if (input == null || input.isEmpty()) {
return input;
}
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
};
// Create a closure to filter out "apple" from the list
Closure<String> filterClosure = new Closure<String>() {
@Override
public void execute(String input) {
if (!input.contains("apple")) {
// Apply the transformer to the string and print it
String transformed = transformer.transform(input);
System.out.println(transformed);
}
}
};
// Apply the closure to filter and transform the list
CollectionUtils.forEach(list, filterClosure);
}
}
এখানে:
Apache Commons Collections এ Transformer এবং Closure তৈরি করার মাধ্যমে আপনি ডেটা স্ট্রাকচারগুলির উপর কাস্টম অপারেশন বা রূপান্তর কার্যকর করতে পারেন। Transformer ইনপুট ডেটাকে আউটপুট ডেটায় রূপান্তর করে, এবং Closure নির্দিষ্ট কাজ বা অপারেশন ডেটার উপাদানগুলির উপর প্রয়োগ করে। এই দুটি শক্তিশালী ইউটিলিটি ক্লাস ব্যবহার করে আপনি জাভা প্রোগ্রামিংয়ে উন্নত ডেটা ম্যানিপুলেশন অপারেশন তৈরি করতে পারেন।
common.read_more